package subraSoft.fenix.gui.reparaciones.modificacion;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.Date;
import java.util.List;

import javax.swing.JLabel;
import javax.swing.JTextField;

import subraSoft.centaurus.gui.option.CenFinder;
import subraSoft.centaurus.gui.util.CenComponentValueUtil;
import subraSoft.centaurus.gui.validators.impl.CenPositiveLongValidator;
import subraSoft.centaurus.model.cobj.CenDefaultCObj;
import subraSoft.fenix.model.reparacion.cobj.FenReparacionQueryCObj;
import subraSoft.fenix.model.reparacion.service.FenReparacionService;
import subraSoft.fenix.model.reparacion.service.impl.FenReparacionServiceImpl;

import com.toedter.calendar.JDateChooser;

public class FenReparacionFinder extends CenFinder {

	private JTextField idTfl;
	private FenClienteChooserController clienteCliChooser;
	
	private JDateChooser fechaCreacionDChooserI;
	private JDateChooser fechaCreacionDChooserF;
	
	private JDateChooser fechaFinalizacionDChooserI;
	private JDateChooser fechaFinalizacionDChooserF;
	
	private JDateChooser fechaEntregaDChooserI;
	private JDateChooser fechaEntregaDChooserF;
	
	private JTextField equipoTfl;
	private JTextField serieTfl;
	
	private JTextField marcaTfl;
	private JTextField accesoriosTfl;
	
	private JTextField pedidoTfl;
	private JTextField realizadoTfl;
	
	private JTextField precioTfl;
	private JTextField observacionesTfl;
	
	private FenReparacionService service = new FenReparacionServiceImpl();
	
	@SuppressWarnings("unchecked")
	public FenReparacionFinder()
	{
		super();
		
		setLayout(new GridBagLayout() );
		GridBagConstraints c = new GridBagConstraints();
	    c.insets = new Insets(3, 3, 3, 3);
	    c.anchor = GridBagConstraints.WEST;
	    
	    // CREACION DE COMPONENTES
		idTfl = new JTextField(20);
		clienteCliChooser = new FenClienteChooserController();
		fechaCreacionDChooserI = new JDateChooser();
		fechaCreacionDChooserF = new JDateChooser();
		fechaFinalizacionDChooserI = new JDateChooser();
		fechaFinalizacionDChooserF = new JDateChooser();
		fechaEntregaDChooserI = new JDateChooser();
		fechaEntregaDChooserF = new JDateChooser();
		equipoTfl = new JTextField(20);
		serieTfl = new JTextField(20);
		marcaTfl = new JTextField(20);
		accesoriosTfl = new JTextField(20);
		pedidoTfl = new JTextField(20);
		realizadoTfl = new JTextField(20);
		precioTfl = new JTextField(20);
		observacionesTfl = new JTextField(20);

		// VALIDACIONES DINAMICAS
		getValidationGroup().add(idTfl, 
				new CenPositiveLongValidator());
		getValidationGroup().add(precioTfl, 
				new CenPositiveLongValidator());
		
		// UBICACION Y LABELS
	    int fila = 0;
	    int col = 0;
	    { // FILA 1
	    	c.gridy = fila++;
			c.gridx = col++;
			add(new JLabel("Id Reparacion"), c);
			
			idTfl.setName("Id reparacion");
			c.gridx = col++;
			add(idTfl, c);
			
			c.gridx = col++;
			add(new JLabel("Cliente"), c);
			
			clienteCliChooser.setName("Cliente");
			c.gridx = col++;
			add(clienteCliChooser, c);
	    }
		
	    col = 0;
	    { // FILA 2
	    	c.gridy = fila++;
			c.gridx = col++;
			add(new JLabel("Fecha de creacion inicial"), c);
			
			fechaCreacionDChooserI.setName("Fecha de creacion inicial");
			c.gridx = col++;
			add(fechaCreacionDChooserI, c);
			
			c.gridx = col++;
			add(new JLabel("Fecha de creacion final"), c);
			
			fechaCreacionDChooserF.setName("Fecha de creacion final");
			c.gridx = col++;
			add(fechaCreacionDChooserF, c);
	    }
	    
	    col = 0;
	    { // FILA 3
	    	c.gridy = fila++;
			c.gridx = col++;
			add(new JLabel("Fecha de finalizacion inicial"), c);
			
			fechaFinalizacionDChooserI.setName("Fecha de finalizacion inicial");
			c.gridx = col++;
			add(fechaFinalizacionDChooserI, c);
			
			// ID CLIENTE
			c.gridx = col++;
			add(new JLabel("Fecha de finalizacion final"), c);
			
			fechaFinalizacionDChooserF.setName("Fecha de finalizacion final");
			c.gridx = col++;
			add(fechaFinalizacionDChooserF, c);
	    }
	    
	    col = 0;
	    { // FILA 3
	    	c.gridy = fila++;
			c.gridx = col++;
			add(new JLabel("Fecha de entrega inicial"), c);
			
			fechaEntregaDChooserI.setName("Fecha de entrega inicial");
			c.gridx = col++;
			add(fechaEntregaDChooserI, c);
			
			c.gridx = col++;
			add(new JLabel("Fecha de entrega final"), c);
			
			fechaEntregaDChooserF.setName("Fecha de entrega final");
			c.gridx = col++;
			add(fechaEntregaDChooserF, c);
	    }
	    
	    col = 0;
	    { // FILA 4
	    	c.gridy = fila++;
			c.gridx = col++;
			add(new JLabel("Equipo"), c);
			
			equipoTfl.setName("Equipo");
			c.gridx = col++;
			add(equipoTfl, c);
			
			c.gridx = col++;
			add(new JLabel("Serie"), c);
			
			serieTfl.setName("Serie");
			c.gridx = col++;
			add(serieTfl, c);
	    }
		
	    col = 0;
	    { // FILA 5
	    	c.gridy = fila++;
			c.gridx = col++;
			add(new JLabel("Marca"), c);
			
			marcaTfl.setName("Marca");
			c.gridx = col++;
			add(marcaTfl, c);
			
			c.gridx = col++;
			add(new JLabel("Accesorios"), c);
			
			accesoriosTfl.setName("Accesorios");
			c.gridx = col++;
			add(accesoriosTfl, c);
	    }
	    
	    col = 0;
	    { // FILA 6
	    	c.gridy = fila++;
			c.gridx = col++;
			add(new JLabel("Pedido"), c);
			
			pedidoTfl.setName("Pedido");
			c.gridx = col++;
			add(pedidoTfl, c);
			
			c.gridx = col++;
			add(new JLabel("Realizado"), c);
			
			realizadoTfl.setName("Realizado");
			c.gridx = col++;
			add(realizadoTfl, c);
	    }
	    
	    col = 0;
	    { // FILA 7
	    	c.gridy = fila++;
			c.gridx = col++;
			add(new JLabel("Precio"), c);
			
			precioTfl.setName("Precio");
			c.gridx = col++;
			add(precioTfl, c);
			
			c.gridx = col++;
			add(new JLabel("Observaciones"), c);
			
			observacionesTfl.setName("Observaciones");
			c.gridx = col++;
			add(observacionesTfl, c);
	    }
	}
	
	
	@Override
	public String validateFinder() 
	{
		if(fechaCreacionDChooserI.getDate() != null &&
				fechaCreacionDChooserF.getDate() != null &&
				fechaCreacionDChooserI.getDate().getTime() > fechaCreacionDChooserF.getDate().getTime())
		{
			return "El rango de fechas de creacion es incorrecto";
		}
		if(fechaFinalizacionDChooserI.getDate() != null &&
				fechaFinalizacionDChooserF.getDate() != null &&
				fechaFinalizacionDChooserI.getDate().getTime() > fechaFinalizacionDChooserF.getDate().getTime())
		{
			return "El rango de fechas de finalizacion es incorrecto";
		}
		if(	fechaEntregaDChooserI.getDate() != null &&
				fechaEntregaDChooserF.getDate() != null &&
				fechaEntregaDChooserI.getDate().getTime() > fechaEntregaDChooserF.getDate().getTime())
		{
			return "El rango de fechas de entrega es incorrecto";
		}
		return null;
	}


	@Override
	public List<CenDefaultCObj> getList()
	{
		Long id = CenComponentValueUtil.getLong(idTfl);
		Long idCli = null;
		if(clienteCliChooser.getSelectedItem() != null)
			idCli = (Long) clienteCliChooser.getSelectedItem().getId();
		Date fCreI = fechaCreacionDChooserI.getDate();
		Date fCreF = fechaCreacionDChooserF.getDate();
		Date fFinI = fechaFinalizacionDChooserI.getDate();
		Date fFinF = fechaFinalizacionDChooserF.getDate();
		Date fEntI = fechaEntregaDChooserI.getDate();
		Date fEntF = fechaEntregaDChooserF.getDate();
		String equipo = CenComponentValueUtil.getString(equipoTfl);
		String serie = CenComponentValueUtil.getString(serieTfl);
		String marca = CenComponentValueUtil.getString(marcaTfl);
		String accesorios = CenComponentValueUtil.getString(accesoriosTfl);
		String pedido = CenComponentValueUtil.getString(pedidoTfl);
		String realizado = CenComponentValueUtil.getString(realizadoTfl);
		Long precio = CenComponentValueUtil.getLong(precioTfl);
		String obs = CenComponentValueUtil.getString(observacionesTfl);
		
		FenReparacionQueryCObj repQ = new FenReparacionQueryCObj(id, idCli, fCreI, fCreF, fFinI, fFinF, fEntI, fEntF, equipo, serie, marca, accesorios, pedido, realizado, precio, obs);
	
		return service.getReparacionesBy(repQ);
	}

	@Override
	public void initFinder() {
		// NADA
		
		//TODO que se llenen los componontes en el caso de que la reparacion ya tuviera un cliente...
		
		/*if(1==1)
			throw new RuntimeException("uoch");*/
		
	}

}
